//
//  LoginViewController.swift
//  weibo
//
//  Created by 陈经纬 on 16/7/21.
//  Copyright © 2016年 陈经纬. All rights reserved.
//
/*
 新浪微博如何进行OAuth授权:
 1.成为新浪的开发者
 在: open.weibo.com上注册一个账号
 
 2.在开发者平台创建一个属于自己的应用程序
 App Key：4129759360
 App Secret：98392a5714c6194f5aee796d971fe0ef
 
 3.对自己创建的应用程序, 开始进行OAuth授权
 3.1获取未授权的RequestToken(获取登录界面)
https://api.weibo.com/oauth2/authorize?client_id=3298143652&redirect_uri=https://www.baidu.com
 
 3.2获取已经授权的RequestToken(让用户登录)
 只要用户输入账号密码, 并且点击授权
 https://www.baidu.com/?code=49cf1abb84110c1839908ef2c39d3c54
 其中code= 后面的字符串就是已经授权的RequestToken
 
 3.3利用已经授权的RequestToken换取AccessToken

 
 
 App Key：3298143652
 App Secret：25776f117c0954245b3b80abcb8a79ca
 授权回调页：https://www.baidu.com
 */

import UIKit
import Alamofire
import AFNetworking
class LoginViewController: UIViewController {
    

    
    //网页界面
    @IBOutlet weak var containWebView: UIWebView!
    /**
     关闭该登录界面
     */
    @IBAction func closeBtn() {
        
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    @IBAction func autoBtnClick() {
        let jsStr = "document.getElementById('userId').value = '15919187216';"
        containWebView.stringByEvaluatingJavaScriptFromString(jsStr)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let urlstr = "https://api.weibo.com/oauth2/authorize?client_id=3298143652&redirect_uri=https://www.baidu.com"
        
        guard let url = NSURL(string: urlstr) else{
            return
        }
        
        let request = NSURLRequest(URL: url)
        
        containWebView.loadRequest(request)
        
        containWebView.delegate = self
        

    }
}


extension LoginViewController:UIWebViewDelegate{
    //请求完毕后会调用该方法
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool{
        
//        JWLog(request)
        /*进入登录界面显示:https://api.weibo.com/oauth2/authorize?client_id=3298143652&redirect_uri=https://www.baidu.com
          进入授权界面显示:https://api.weibo.com/oauth2/authorize
         成功进入会调界面:https://www.baidu.com/?code=49cf1abb84110c1839908ef2c39d3c54
        */
        // 1.判断当前是否是授权回调页面
        guard let urlstr = request.URL?.absoluteString else{
            return false
        }
        
        if !urlstr.hasPrefix(WB_Redirect_uri)
        {
            return true
        }
        
        // 2.判断授权回调地址中是否包含code=
        let key = "code="
        
        guard let str = request.URL!.query else
        {
            return false
        }
        if str.hasPrefix(key)
        {
            let code = str.substringFromIndex(key.endIndex)
            loadAccessToken(code)
            return false
        }
        return false

    }
    
    func loadAccessToken(codeStr:String?)  {
        guard let code = codeStr else
        {
            return
        }
        
        let parameter:[String:AnyObject] = ["client_id":"3298143652","client_secret":"25776f117c0954245b3b80abcb8a79ca","grant_type":"authorization_code","code":code,"redirect_uri":"https://www.baidu.com"]
        let path = "oauth2/access_token"
        
        NetWorkingTool.shareInstance.POST(path, parameters: parameter, success: { (task:NSURLSessionDataTask, objc:AnyObject?) -> Void in
            
            
            let account = UserAccount(dict: objc as! [String : AnyObject])
            
            
            // 3.获取用户信息
            account.loadUserInfo({ (account, error) -> () in
                
                account?.saveAccount()
                JWLog(account)
                
                NSNotificationCenter.defaultCenter().postNotificationName(SwithrootViewController, object: "welcome")
                
                self.closeBtn()
                
            })
            
            }, failure: { (task:NSURLSessionDataTask?, errpr:NSError) -> Void in
                //                    JWLog(errpr)
        })
        
        //4跳转到欢迎回来界面---通知的方法,"welcome"标记通知的信息,在AppDelegate实现通知方法
        
        
        //            Alamofire.request(.POST, path, parameters: parameter)
        //                .validate().responseJSON { response in
        //                    print(response)
        
        
        /*结果:
         "access_token" = "2.00HvXk9B3pfMbD128bd9223f9ByfcC";用户授权的唯一票据，用于调用微博的开放接口，同时也是第三方应用验证微博用户登录的唯一票据，第三方应用应该用该票据和自己应用内的用户建立唯一影射关系，来识别登录状态，不能使用本返回值里的UID字段来做登录识别。
         
         "expires_in" = 157679999;access_token的生命周期，单位是秒数。
         
         "remind_in" = 157679999;同上,即将废弃
         
         uid = 1340963721;授权用户的UID，本字段只是为了方便开发者，减少一次user/show接口调用而返回的，第三方应用不能用此字段作为用户登录状态的识别，只有access_token才是用户授权的唯一票据。
         */
        //                    let account = UserAccount(dict: dict as! [String : AnyObject])
        //                    JWLog(account.saveAccount())
        
        
        //            }
        
        
        
        
        
        
    

    }


}